package String_;
/*      给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
        如果剩余字符少于 k 个，则将剩余字符全部反转。
        如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
        示例 1：
        输入：s = "abcdefg", k = 2
        输出："bacdfeg"

        示例 2：
        输入：s = "abcd", k = 2
        输出："bacd"*/
public class lc541 {
    public static void main(String[] args) {
        String s="abcdefg";
        String s1 = reverseStr(s, 2);
        System.out.println(s1);

    }

    public static String reverseStr(String s, int k) {
        char[] chars=s.toCharArray();
        int start=0;
        int end=2*k-1;//每次进行反转操作的区间，区间长为end-start+1
        int length=end+1;
        while(length<= chars.length){
            reverseString(chars,start,start+k-1);
            start=end+1;
            end=start+2*k-1;
            length=end+1;
        }
        end= chars.length-1;
        int lastlength=end-start+1;
        if(lastlength<k){
            reverseString(chars,start,end);
        } else if (lastlength>=k&&lastlength<2*k) {
            reverseString(chars,start,start+k-1);
        }
        //字符数组转字符串方法一
        //String result=String.valueOf(chars);
        //字符数组转字符串方法二
        String result= new String(chars);

        return result;


    }
    public static void reverseString(char[] s,int start,int end) {
        if(end-start+1==0||end-start+1==1){
            // return s;
        }else{
            int i=0;
            char tem;
            while(i<((end-start+1)/2)){
                tem=s[i+start];
                s[i+start]=s[end-i];
                s[end-i]=tem;
                i++;
            }
            //  return s;
        }
    }
}
